跳到主要内容

过渡:从 FunctionCall 到 DeepAgent

1.1 FunctionCall 的局限

在上一讲的 FunctionCall 阶段,我们学会了让 LLM 调用工具:

from langchain.tools import tool

@tool
def get_weather(city: str) -> str:
"""获取城市天气"""
return f"{city}的天气是晴天"

# LLM 收到用户问题后,决定调用这个函数

💡 关键思考:类型提示 (Type Hinting) 的重要性 你可能注意到了 def get_weather(city: str) 中的 : str。这不仅仅是注释,而是给 Agent 的"硬性约束"。

  • 现状:在 DeepAgent 中,我们只用简单的 Python 基本类型(str, int)。
  • 预告:但在处理复杂的金融数据时(比如要求输出严格的 JSON 格式),光靠 str 是不够的。在**下一讲(NLP 自然语言处理)**中,我们将引入 Pydantic 库,它能像"模具"一样,强迫 Agent 输出精准的结构化数据,而不是随意的自然语言。

但 FunctionCall 存在明显局限:

问题描述
单步执行只能执行单个工具调用,无法处理复杂任务
无记忆能力每次对话都是全新的,无法记住用户偏好
缺乏规划不会主动分解任务、制定步骤
工具固定新增工具需要修改代码,灵活性差

1.2 DeepAgent 的解决方案

DeepAgent 在 FunctionCall 的基础上,引入了五大核心能力,形成一个完整的 Agent 系统:

从FunctionCall到DeepAgent

核心能力说明:

  1. Planning(规划能力):Agent 能够自动分解复杂任务为多个步骤,制定执行计划

  2. Memory(记忆系统):跨会话持久化存储,记住用户偏好和上下文

  3. SubAgent(子代理):支持专业化的子代理,处理特定领域任务

  4. Backend(后端):提供文件系统访问能力,支持工具读取、写入和搜索文件

  5. Skills(技能):通过类似目录一样的渐进式披露,传入指定的工作流程并减少上下文开销

这五种能力建立在 FunctionCall Agent 的基础之上,使 DeepAgent 从"被动回答问题"升级为"主动完成任务"的智能代理。